/**
 * 
 */
package net.danielpaz.puc.poo.frigorifico.model;

import java.sql.*;

/**
 * @author Junior
 *
 */
public class ProdutoDAO {
    /* Declara os atributos para utilizacao da classe DAO*/
    public BD bd;
    public Produto produto;
    private PreparedStatement statement;
    private ResultSet resultSet;
    private String men, sql;
    public static final byte INCLUSAO = 1;
    public static final byte ALTERACAO = 2;
    public static final byte EXCLUSAO = 3;

    public ProdutoDAO() {
        bd = new BD();
        produto = new Produto();
    }

    	/* 
         * Localiza o Pedido atravez da variavel produto pelo tipo (Ave ou Bovino)
	 * @param tipo
	 * @return Pedido
	 * 
	 */
    public boolean localizar(String tipo) {
        sql = "select * from produto where id = ?";
        try{
            statement = bd.connection.prepareStatement(sql);
            if (tipo == "Ave") {
            	statement.setInt(1, produto.getAve().getId());
            } else {
            	statement.setInt(1, produto.getBovino().getId());
            }
            resultSet = statement.executeQuery();
            while (resultSet.next()) {
            	if (tipo == "Ave") {
            		produto.getAve().setDescricao(resultSet.getString(1));
            	} else {
            		produto.getBovino().setDescricao(resultSet.getString(1));
            	}
            }
            return true;
        }
        catch (SQLException erro) {
        	erro.printStackTrace();
            return false;
        }
    }
	/* 
         * Metodo que verifica o tipoDoProduto (Ave ou Bovino e conforme a operacao faz o insert, update ou delete)
	 * @param int operacao, String tipo
	 * @return String se conseguiu ou nao realizar a operacao solicitada
	 * 
	 */
    public String atualizar(int operacao, String tipoProduto) {
        men = "Operacao realizada com sucesso!";
        try {
            if (operacao==INCLUSAO){
            	if (tipoProduto == "AVE") {
            		sql = "insert into ave (descricao, fornecedor_id, tipoProduto, pele) values (?,?,?,?)";
            	} else {
            		sql = "insert into bovino (descricao, fornecedor_id, tipoProduto, osso) values (?,?,?,?)";
            	}
                statement = bd.connection.prepareStatement(sql);
                if (tipoProduto == "AVE") {
	                statement.setString(1, produto.getAve().getDescricao());
					statement.setInt(2, produto.getAve().getFornecedor().getId());
                } else {
                	statement.setString(1, produto.getBovino().getDescricao());
					statement.setInt(2, produto.getBovino().getFornecedor().getId());
                }
				statement.setInt(3, 1);
            }
            else if (operacao==ALTERACAO){
            	if (tipoProduto == "AVE") {
	                sql = "update produto set descricao = ? " +
	                        " where id = ?";
	                statement = bd.connection.prepareStatement(sql);
	                statement.setInt(2, produto.getAve().getId());
	                statement.setString(1, produto.getAve().getDescricao());
            	} else {
	                sql = "update bovino set descricao = ? " +
	                        " where id = ?";
	                statement = bd.connection.prepareStatement(sql);
	                statement.setInt(2, produto.getBovino().getId());
	                statement.setString(1, produto.getBovino().getDescricao());
            	}
            }
            else if (operacao==EXCLUSAO){
            	if (tipoProduto == "AVE") {
	                sql = "delete from ave where id = ?";
	                statement = bd.connection.prepareStatement(sql);
	                statement.setInt(1, produto.getAve().getId());
            	} else {
            		sql = "delete from bovino where id = ?";
	                statement = bd.connection.prepareStatement(sql);
	                statement.setInt(1, produto.getBovino().getId());
            	}
            }
            if (statement.executeUpdate() == 0)
                men = "Falha na operacao!";
        } catch (SQLException erro) {
            men = "Falha na operacao " + erro.toString();
        }
        return men;
    }
}
